如何在 Linux 中递归删除文件 您所在的位置:网站首页 linux 删除目录 性能 如何在 Linux 中递归删除文件

如何在 Linux 中递归删除文件

2024-04-28 03:39| 来源: 网络整理| 查看: 265

如何在 Linux 中递归删除文件

本 Linux 教程介绍了如何使用不同的可用技术递归删除文件。

阅读本文后,您将能够从命令行查找并删除单个或多个文件。本教程针对 Linux 新用户和经验丰富的用户进行了优化。

本教程的第一部分解释了如何递归删除文件(包含所有内容的目录和子目录的内容)。下面我还添加了说明,用于根据文件的大小、扩展名、创建或修改时间以及权限递归删除某些类型的文件。

本文档中的所有实际示例都包含屏幕截图,以便每个 Linux 用户轻松理解并应用它们来满足自己的需求。

在Linux中递归删除所有文件

第一部分展示如何使用rm(删除)命令删除目录及其所有内容,包括所有子目录及其文件和其他子目录。

与 -r 标志一起使用的 rm 命令将删除所有目录的内容,无论其类型如何。

但首先,让我们使用 ls 命令查看我家中的目录。

ls ~/

如您所见,我有 5 个目录:Desktop、dir2、Documents、Downloads 和 removerecurdir。

让我们使用命令 tree 查看名为 removerecurdir 的目录的内容,如下面的屏幕截图所示。

tree removerecurdir

根据 tree 输出,removerecurdir 目录包含两个目录,其中包含子目录和 removecurdir 内的一个文件: 目录dir1,包含 otherdir 和 otherdir2 子目录,目录 dir2 包含一个名为 file3 的文件我>.

假设我们要删除 removecurdir 及其所有内容,包括所有文件和子目录。正确的命令是 rm 命令,后跟 -r 标志,如下面的语法所示。

rm -r

因此,如果我想删除 removerecurdir 及其所有内容,我运行:

rm -r removerecurdir/

随后的 ls 输出显示该目录,并且其所有内容均已成功删除。

如何按大小递归删除文件

本节介绍如何使用命令 find 递归删除小于 10 MB 的文件。

语法如下:

find -type f -size - -exec rm {} +

请注意,在下面的示例中,我使用 sudo 来获取删除受保护文件的权限。

sudo find /var/log -type f -size -10M -exec rm {} +

删除大于特定大小的文件的语法非常相似。减号 (-) 必须替换为加号 (+)。确切的语法如下所示。

find -type f -size + -exec rm {} +

在下面的示例中,我将使用前面的语法来删除大于 1 GB 的文件。

find /var/log -type f -size +1G -exec rm {} +

如何按扩展名递归删除文件(文件类型)

本章介绍如何按扩展名或文件类型递归删除文件。

在我的家里,我有一个名为 testhint 的目录。让我们使用 tree 命令查看其内容。

tree testhint/

如您所见,父目录 testhint 包含一个文件 (file1.txt) 和两个子目录:包含 file3.txt 的 testhint2 和包含 file3 和 Something.txt 的 testhint3 子目录。

假设您只想递归删除所有 txt 文件。语法如下:

find -type f -name '*.' -print -delete

因此,要递归删除父目录 testhint 中的所有 txt 文件,我运行下图所示的命令。

find ~/testhint -type f -name '*.txt' -print -delete

正如您所看到的,所有 txt 文件都已删除,仅保留了不带扩展名的file3。

tree testhint

您还可以使用 find 和 exec 命令按扩展名删除文件,我将在下面解释。

让我们看一个具有相同目录结构但文件不同的新场景。

上图显示了 4 个日志文件和 3 个不带扩展名的文件。

使用 -exec 按扩展名删除文件的语法如下:

find -type f -name '*.' -exec rm -f {} \;

因此,为了从上一个屏幕截图中删除 .log 文件,我运行了以下命令。

find ~/testhint -type f -name '*.log' -exec rm -f {} \;

上图显示所有 .log 文件均已删除,而其他文件仍保留。

xargs 命令提供了相同的解决方案。 xargs 和 exec 之间的区别在于,exec 会在每次文件匹配条件时运行 rm 函数。命令 xargs 对所有找到的符合条件的文件执行一次 rm 命令。

使用 find 和 xargs 删除所有扩展名的文件的语法如下:

find -name "*." -print0 | xargs -0 rm

下面的屏幕截图中描述的新场景显示了不同子目录中的五个 .c 文件和五个不带 .c 扩展名的文件。

要使用 xargs 删除所有 .c 文件,我运行如下所示的命令。

find . -name "*.c" -print0 | xargs -0 rm

再次,您可以看到所选的扩展文件已成功删除。

根据权限递归删除所有文件

让我们检查一下 testhint 目录的新内容。

有四个具有完全权限的文件(file2、file3.c、file6.c 和 file7)。

现在假设您想要查找并删除对每个人都具有完全权限的所有文件。

语法如下:

find -perm -print0 | xargs -0 rm

因此,要删除对所有用户具有完全访问权限的所有文件,我执行以下命令。

find ~/testhint -perm 777 -print0 | xargs -0 rm

如何根据修改或创建时间递归删除文件

本教程的最后一部分解释了如何按创建或修改时间递归删除文件。

语法如下:

find ~/testhint -perm 777 -print0 | xargs -0 rm

如果要删除最近一天(最近24小时)创建或修改的文件,请运行以下命令,其中1是天数,减号(-)表示在定义的天数之前创建或修改的文件。

find -type f -mtime -1 -delete

要删除一天前、24 小时前创建或修改的文件,只需将减号替换为加号即可。

find -type f -mtime +1 -delete结论

由于 Linux 是一个非常通用且灵活的操作系统,因此用户可以使用不同的技术来获得相同的结果。上面解释的所有替代方案几乎对每个 Linux 发行版都有效。有些命令甚至对某些 Unix 系统很有用。正如您所看到的,实现它们很容易,任何 Linux 用户都可以独立于其知识水平来完成。如需根据其他条件递归删除文件,请查看本文介绍的各个命令的主页。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有